var http = require('http');
var parse = require('url').parse;
var join = require('path').join;
var fs = require('fs');

var root = __dirname;

var server = http.createServer(function(req, res) {
  var url = parse(req.url); // 解析URL以获取路径名
  var path = join(root, url.pathname); // 构造绝对路径
  fs.stat(path, function(err, stat) { // 检查文件是否存在
    if (err) {
      if ('ENOENT' == err.code) { // 文件不存在
        res.statusCode = 404;
        res.end('Not Found');
      } else { // 其他错误
        res.statusCode = 500;
        res.end('Internal Server Error');
      }
    } else {
      res.setHeader('Content-Length', stat.size); // 用stat对象的属性设置Content-length
      var stream = fs.createReadStream(path); // 创建fs.ReadStream
      stream.pipe(res);  // res.end会在stream.pipe()内部调用
      stream.on('error', function(err) {
        res.statusCode = 500;
        res.end('Internal Server Error');
      });
    }
  });
});

server.listen(3000);
